home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 2 / Gekikoh Dennoh Club Vol. 2 (Japan).7z / Gekikoh Dennoh Club Vol. 2 (Japan) (Track 01).bin / fsw / zm302 / zm302_s.lzh / PRTERRMS.HAS < prev    next >
Text File  |  1996-08-18  |  7KB  |  407 lines

  1. do_prt_err_mes:
  2.     * < d1.hw=output mode(0:screen,1:buffer)    (Be used in ZMSC0)
  3.     * < d1.lw=language mode(0:English,1:Japanese)
  4.     * < d2.l=num. of err/warn
  5.     * < a0.l=error table addr.
  6.     * < a1.l=ZMD filename(ない場合は0)
  7.     * < a2.l=source address(ない場合は0)
  8.     * < a3.l=source filename(ない場合は0)
  9.     * < (a5.l=画面リダイレクトバッファ(FNC $6F))
  10.     * < (d7.l=文字ポインタ(FNC $6F))
  11.     * > a0.l=出力バッファ(if d1.l==1)    (Be used in ZMSC0)
  12.     * - all
  13. reglist    reg    d0-d7/a0-a5
  14.     movem.l    reglist,-(sp)
  15.     lea    err_mes_tbl_e(pc),a4    *English version
  16.     tst.b    d1
  17.     beq    @f
  18.     lea    err_mes_tbl_j(pc),a4    *Japanese version
  19. @@:
  20.     move.l    a1,d6            *後で使う
  21. errocc_lp:
  22.     move.l    a3,src_name-work(a6)    *主ソースファイル名
  23.     moveq.l    #0,d0            *dummy line number
  24.     move.l    (a0)+,d1        *err number
  25.     move.l    a0,d3
  26.     move.l    (a0)+,d0
  27.     or.l    (a0)+,d0
  28.     or.l    (a0)+,d0
  29.     beq    case_no_lner        *付加エラー情報なし
  30.     move.l    d3,a0
  31.  
  32.     move.l    (a0)+,d0        *zms file name
  33.     beq    @f
  34.     move.l    d0,src_name-work(a6)        *サブソースファイル名
  35. @@:
  36.     cmpi.w    #UNDEFINED_ZMD_CODE,d1
  37.     beq    dpem_clcttl_case
  38.     cmpi.w    #FILE_NOT_FOUND,d1
  39.     beq    dpem_read_err
  40.     cmpi.w    #ILLEGAL_FILE_SIZE,d1
  41.     beq    dpem_read_err
  42.     cmpi.w    #READ_ERROR,d1
  43.     beq    dpem_read_err
  44.  
  45.     move.l    (a0)+,d3    *line number
  46.     move.l    (a0)+,d5    *line locate
  47.     move.l    d3,d0
  48.     bsr    num_to_str    * < d0.l=line number
  49.  
  50.     tst.l    src_name-work(a6)        *ない場合はスキップ
  51.     beq    @f
  52.     move.l    src_name-work(a6),-(sp)
  53.     PRINT            *filename表示
  54.     addq.w    #4,sp
  55.  
  56.     lea    suji-1(pc),a1
  57.     bsr    prta1_        *tab & line number
  58.  
  59.     move.w    #9,-(sp)    *tab
  60.     PUTCHAR
  61.     addq.w    #2,sp
  62. @@:
  63.     move.l    d1,d0
  64.     andi.l    #$ffff,d0
  65.     bsr    num_to_str
  66.  
  67.     lea    Error(pc),a1
  68.     cmpi.w    #SURPLUS_IN_DIVISION,d1
  69.     bcs    @f
  70.     lea    Warning(pc),a1
  71. @@:
  72.     bsr    prta1_
  73.  
  74.     lea    suji(pc),a1
  75.     bsr    prta1_        *err number
  76.  
  77.     lea    colontab(pc),a1    *':',13,10,0
  78.     bsr    prta1_
  79.  
  80.     add.w    d1,d1
  81.     move.w    (a4,d1.w),d0
  82.     lea    (a4,d0.w),a1
  83.     bsr    prta1_        *エラーメッセージ表示
  84.  
  85.     lea    CRLF(pc),a1
  86.     bsr    prta1_
  87.  
  88.     move.l    a2,-(sp)
  89.     move.l    src_name-work(a6),d0
  90.     beq    gnd00        *サブソースでない
  91.     cmp.l    d0,a3
  92.     beq    gnd00        *サブソースでない
  93.     move.l    d0,a2
  94. @@:
  95.     tst.b    (a2)+        *ファイル名スキップ
  96.     bne    @b
  97.     move.l    a2,d0
  98.     addq.l    #1,d0
  99.     bclr.l    #0,d0
  100.     move.l    d0,a2
  101.     add.l    (a2)+,a2
  102. gnd00:
  103.     move.l    a2,d0        *ない場合はスキップ
  104.     beq    go_next_dpem
  105.     tst.l    d3
  106.     beq    go_next_dpem
  107.     bsr    scan_line_number
  108. go_next_dpem:
  109.     move.l    (sp)+,a2
  110.     bra    next_dpem
  111. case_no_lner:            *行情報なしエラー
  112.     tst.l    d6
  113.     beq    @f
  114.     pea    (a1)
  115.     PRINT            *filename
  116.     addq.w    #4,sp
  117.  
  118.     move.w    #9,-(sp)    *tab
  119.     PUTCHAR
  120.     addq.w    #2,sp
  121. @@:
  122.     move.l    d1,d0
  123.     andi.l    #$ffff,d0
  124.     bsr    num_to_str
  125.  
  126.     lea    Error(pc),a1
  127.     cmpi.w    #SURPLUS_IN_DIVISION,d1
  128.     bcs    @f
  129.     lea    Warning(pc),a1
  130. @@:
  131.     bsr    prta1_
  132.  
  133.     lea    suji(pc),a1    *err number
  134.     bsr    prta1_
  135.  
  136.     lea    colontab(pc),a1    *':',13,10,0
  137.     bsr    prta1_
  138.  
  139.     add.w    d1,d1
  140.     move.w    (a4,d1.w),d0
  141.     lea    (a4,d0.w),a1
  142.     bsr    prta1_        *エラーメッセージ表示
  143.  
  144.     lea    CRLF(pc),a1
  145.     bsr    prta1_
  146. next_dpem:
  147.     subq.l    #1,d2
  148.     bne    errocc_lp
  149.     movem.l    (sp)+,reglist
  150.     rts
  151.  
  152. dpem_clcttl_case:        *UNDEFINED_ZMD_CODE(CALC_TOTAL専用)
  153.     move.l    (a0)+,d0    *offset
  154.     bsr    get_hex32
  155.  
  156.     tst.l    src_name-work(a6)
  157.     beq    @f        *ない場合はスキップ
  158.     move.l    src_name-work(a6),-(sp)
  159.     PRINT            *filename
  160.     addq.w    #4,sp
  161.  
  162.     move.w    #9,-(sp)    *tab
  163.     PUTCHAR
  164.     addq.w    #2,sp
  165. @@:
  166.     lea    suji(pc),a1
  167.     bsr    prta1_        *offset
  168.  
  169.     move.w    #32,-(sp)
  170.     PUTCHAR            *spc
  171.     addq.w    #2,sp
  172.  
  173.     move.l    (a0)+,d0    *zmd
  174.     bsr    get_hex32
  175.     lea    suji+6(pc),a1
  176.     bsr    prta1_        *zmd
  177.  
  178.     move.w    #9,-(sp)    *tab
  179.     PUTCHAR
  180.     addq.w    #2,sp
  181.  
  182.     move.l    d1,d0
  183.     andi.l    #$ffff,d0
  184.     bsr    num_to_str
  185.  
  186.     lea    Error(pc),a1
  187.     cmpi.w    #SURPLUS_IN_DIVISION,d1
  188.     bcs    @f
  189.     lea    Warning(pc),a1
  190. @@:
  191.     bsr    prta1_
  192.  
  193.     lea    suji(pc),a1
  194.     bsr    prta1_        *err number
  195.  
  196.     lea    colontab(pc),a1    *':',13,10,0
  197.     bsr    prta1_
  198.  
  199.     add.w    d1,d1
  200.     move.w    (a4,d1.w),d0
  201.     lea    (a4,d0.w),a1
  202.     bsr    prta1_        *エラーメッセージ表示
  203.  
  204.     lea    CRLF(pc),a1
  205.     bsr    prta1_
  206.  
  207.     bra    next_dpem
  208.  
  209. dpem_read_err:                *READ ERROR
  210.     tst.l    src_name-work(a6)    *ない場合はスキップ
  211.     beq    @f
  212.     move.l    src_name-work(a6),-(sp)
  213.     PRINT                *filename表示
  214.     addq.w    #4,sp
  215.  
  216.     move.w    #9,-(sp)        *tab
  217.     PUTCHAR
  218.     addq.w    #2,sp
  219. @@:
  220.     move.l    d1,d0
  221.     andi.l    #$ffff,d0
  222.     bsr    num_to_str
  223.  
  224.     lea    Error(pc),a1
  225.     cmpi.w    #SURPLUS_IN_DIVISION,d1
  226.     bcs    @f
  227.     lea    Warning(pc),a1
  228. @@:
  229.     bsr    prta1_
  230.  
  231.     lea    suji(pc),a1
  232.     bsr    prta1_            *err number
  233.  
  234.     lea    colontab(pc),a1    *':',13,10,0
  235.     bsr    prta1_
  236.  
  237.     add.w    d1,d1
  238.     move.w    (a4,d1.w),d0
  239.     lea    (a4,d0.w),a1
  240.     bsr    prta1_            *エラーメッセージ表示
  241.  
  242.     lea    CRLF(pc),a1
  243.     bsr    prta1_
  244.  
  245.     addq.w    #8,a0
  246.     bra    next_dpem
  247.  
  248. Warning:    dc.b    'WARNING ',0
  249. Error:        dc.b    'ERROR   ',0
  250. colontab:    dc.b    ':',9,0
  251.     .even
  252. src_name:    ds.l    1
  253.  
  254. scan_line_number:        *エラー箇所の表示
  255.     * < d3.l=探したい行番号
  256.     moveq.l    #1,d4
  257. linehedlp00:            *行の頭だし
  258.     cmp.l    d3,d4
  259.     beq    sln_findend
  260. linehedlp01:
  261.     move.b    (a2)+,d0
  262.     jsr    chk_kanji-work(a6)
  263.     bpl    @f
  264.     addq.w    #1,a2
  265.     bra    linehedlp01
  266. @@:
  267.     cmpi.b    #$0a,d0
  268.     bne    linehedlp01
  269.     addq.l    #1,d4
  270.     bra    linehedlp00
  271. sln_findend:
  272.     move.l    a2,a1
  273.     move.l    a1,-(sp)
  274. slnfe_lp:
  275.     move.b    (a2)+,d0
  276.     jsr    chk_kanji-work(a6)
  277.     bpl    @f
  278.     addq.w    #1,a2
  279.     bra    slnfe_lp
  280. @@:
  281.     tst.b    d0
  282.     beq    @f
  283.     cmpi.b    #$0d,d0
  284.     beq    @f
  285.     cmpi.b    #$0a,d0
  286.     beq    @f
  287.     cmpi.b    #$1a,d0
  288.     bne    slnfe_lp
  289. @@:
  290.     clr.b    -(a2)        *終端コード設定
  291.     bsr    prta1_
  292.     move.b    d0,(a2)        *復元
  293.  
  294.     lea    CRLF(pc),a1    *13,10,0
  295.     bsr    prta1_
  296.     move.l    (sp)+,a1
  297.     tst.l    d5
  298.     beq    prt_arrow
  299. perlctlp:            *エラー箇所の明示
  300.     moveq.l    #9,d0        *tab
  301.     cmp.b    (a1)+,d0
  302.     beq    @f
  303.     moveq.l    #' ',d0
  304. @@:
  305.     move.w    d0,-(sp)
  306.     PUTCHAR
  307.     addq.w    #2,sp
  308.     subq.l    #1,d5
  309.     bne    perlctlp
  310. prt_arrow:
  311.     move.w    #'^',-(sp)
  312.     PUTCHAR
  313.     addq.w    #2,sp
  314.  
  315.     lea    CRLF(pc),a1    *13,10,0
  316.     bra    prta1_
  317.  
  318. num_to_str:    *レジスタの値を文字数列にする
  319.     * < d0.l=value
  320.     * > (suji)=ascii data
  321.     * > (suji2)=ascii data
  322.     * - all(except d0)
  323.     movem.l    d1-d4/a0-a1,-(sp)
  324.     clr.b    d4
  325.     lea    suji(pc),a0
  326.     lea    exp_tbl(pc),a1
  327.     moveq.l    #10-1,d1
  328. ex_loop0:
  329.     moveq.l    #0,d2
  330.     move.l    (a1)+,d3
  331. ex_loop1:
  332.     sub.l    d3,d0
  333.     bcs    xbcd_str
  334.     addq.b    #1,d2
  335.     bra    ex_loop1
  336. xbcd_str:
  337.     add.l    d3,d0
  338.     move.b    d2,d3
  339.     or.b    d4,d3
  340.     bne    nml_ktset
  341. *    move.b    #$20,(a0)+
  342.     bra    nml_lp_ope
  343. nml_ktset:
  344.     st    d4
  345.     add.b    #'0',d2
  346.     move.b    d2,(a0)+
  347. nml_lp_ope:
  348.     dbra    d1,ex_loop0
  349.     lea    suji(pc),a1
  350.     cmpa.l    a1,a0
  351.     bne    @f
  352.     move.b    #'0',(a0)+
  353. @@:
  354.     clr.b    (a0)        *end flg
  355.                 *桁揃え処理
  356.     sub.l    a1,a0        *a0=len
  357.     move.l    a0,d0
  358.     divu    #3,d0
  359.     swap    d0
  360.     lea    suji2(pc),a0
  361.     subq.w    #1,d0
  362.     bcs    soroe01
  363. @@:
  364.     move.b    (a1)+,(a0)+
  365.     dbra    d0,@b
  366.     swap    d0
  367.     tst.w    d0
  368.     beq    soroelp
  369.     move.b    #',',(a0)+
  370.     bra    soroelp
  371. soroe01:
  372.     swap    d0
  373. soroelp:
  374.     move.b    (a1)+,(a0)+
  375.     move.b    (a1)+,(a0)+
  376.     move.b    (a1)+,(a0)+
  377.     subq.w    #1,d0
  378.     ble    exit_soroe
  379.     move.b    #',',(a0)+
  380.     bra    soroelp
  381. exit_soroe:
  382.     clr.b    (a0)        *end code
  383.     movem.l    (sp)+,d1-d4/a0-a1
  384.     rts
  385.  
  386. get_hex32:            *値→16進数文字列(8bytes)
  387.     * < d0=data value
  388.     * > (a1)=suji(ascii numbers)
  389.     * - all
  390.     movem.l    d0-d1/d4/a1,-(sp)
  391.     lea    suji+8(pc),a1
  392.     clr.b    (a1)
  393.     moveq.l    #8-1,d4
  394. gh_lp32:
  395.     move.b    d0,d1
  396.     andi.b    #$0f,d1
  397.     add.b    #$30,d1
  398.     cmpi.b    #'9',d1
  399.     bls    its_hex32
  400.     addq.b    #7,d1
  401. its_hex32:
  402.     move.b    d1,-(a1)
  403.     lsr.l    #4,d0
  404.     dbra    d4,gh_lp32
  405.     movem.l    (sp)+,d0-d1/d4/a1
  406.     rts
  407.